import Interceptor from "./core/interceptor";
import Request from "./index";
import store from "../../store/index.js"

export const globalInterceptor = {
	request: new Interceptor(),
	response: new Interceptor()
};
/*
全局过滤POST
*/
const PASS_URL = [
	['post', '/api/user/auth/sapp/'],
	['get', '/api/'],
]

/**
 * 全局配置
 * 只能配置 静态数据
 * `content-type` 默认为 application/json
 * `header` 中`content-type`设置特殊参数 或 配置其他会导致触发 跨域 问题，出现跨域会直接进入响应拦截器的catch函数中
 */
export const config = {
	baseURL: "https://nhdz.utools.club",
	// baseURL: "http://127.0.0.1",
	// baseURL: "https://api.ndmrak.com",
	header: {
		'Content-Type': 'application/json'
	}
};

/**
 * 全局 请求拦截器, 支持添加多个拦截器
 * 例如: 配置token、添加一些默认的参数
 *
 * `return config` 继续发送请求
 * `return false` 会停止发送请求，不会进入错误数据拦截，也不会进入请求对象中的catch函数中
 * `return Promise.reject('xxxxx')` 停止发送请求, 会错误数据拦截，也会进入catch函数中
 *
 * @param {Object} config 发送请求的配置数据
 */
globalInterceptor.request.use(
	config => {

		if (store.state.login.isLogin) {
			// 配置X-TOKEN
			config.header["X-token"] = store.state.login.token
		}else{
			// 配置URL过滤器
			let isPass = false
			let instanceURL = config.instanceURL // 请求URI
			PASS_URL.forEach((item, i) => {
				console.log(instanceURL, item)
				if (config.method === item[0]) {
					if (instanceURL.indexOf(item[1]) != -1) {
						console.log("get");
						isPass = true; // 回调内部,不能跳出
					}
				}
			})
			
			
			if (!isPass) {
				console.log("一个["+config.method+"]请求被拦截URL是["+instanceURL+"]")
				uni.switchTab({
					url: '../../pages/user/index',
					success: () => {
						uni.showToast({
							title: '请先登录',
							icon: 'none'
						});
					},
					fail: (response) => {
						console.log(response);
					}
				})
				return false
			}
		}
		return config;
	},
	err => {
		console.error("is global fail request interceptor: ", err);
		return false;
	}
);

/**
 * 全局 响应拦截器, 支持添加多个拦截器
 * 例如: 根据状态码选择性拦截、过滤转换数据
 *
 * `return res` 继续返回数据
 * `return false` 停止返回数据，不会进入错误数据拦截，也不会进入catch函数中
 * `return Promise.reject('xxxxx')` 返回错误信息, 会错误数据拦截，也会进入catch函数中
 *
 * @param {Object} res 请求返回的数据
 * @param {Object} config 发送请求的配置数据
 * @return {Object|Boolean|Promise<reject>}
 */
globalInterceptor.response.use(
	(res, config) => {
		if(res.statusCode == 401){
			this.$store.commit('login/loingOut');
			uni.switchTab({
				url: '../../pages/user/index',
				success: () => {
					uni.showToast({
						title: '请先登录',
						icon: 'none'
					});
				},
				fail: (response) => {
					console.log(response);
				}
			})
		}else if(res.statusCode == 403){
			uni.showToast({
				title: '没有权限',
				icon: 'none'
			});
		}
		console.log(res,config);
		return res;
	},
	(err, config) => {
		console.error("is global response fail interceptor");
		console.error("err: ", err);
		console.error("config: ", config);

		return Promise.reject(err);
	}
);
